"""
命令行参数配置模块
该模块使用argparse库定义和管理PyTorch项目的各种配置参数
包括学习参数、训练参数、显示参数等
"""

import argparse  # 导入命令行参数解析库

# 创建ArgumentParser对象，用于处理命令行参数
# description参数用于描述程序的用途
parser = argparse.ArgumentParser(description="A project implemented in pyTorch")

# =========================== Learning Configs ============================
# 学习配置参数部分 - 主要定义与模型训练和学习相关的参数

# 训练总轮数参数
parser.add_argument('--n_epoch', type=int)
# 批量大小参数，支持长格式--batch_size和短格式-b
parser.add_argument('-b', '--batch_size', type=int)
# 测试时的批量大小参数
parser.add_argument('--test_batch_size', type=int)
# 学习率参数
parser.add_argument('--lr', type=float)
# GPU设备参数，指定使用的GPU
parser.add_argument('--gpu', type=str)
# 模型快照保存路径前缀
parser.add_argument('--snapshot_pref', type=str)
# 恢复训练时加载的模型路径，默认值为空字符串
parser.add_argument('--resume', type=str, default="")
# 评估模式标志，如果设置该参数则进入评估模式
parser.add_argument('--evaluate', action='store_true')
# 梯度裁剪阈值，用于防止梯度爆炸
parser.add_argument('--clip_gradient', type=float)
# 损失函数权重参数
parser.add_argument('--loss_weights', type=float)
# 起始训练轮数，用于从指定轮数开始训练
parser.add_argument('--start_epoch', type=int)

# 以下是被注释掉的动量参数配置
# parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
#                     help='momentum')

# 权重衰减参数，用于L2正则化，支持长格式--weight_decay和短格式--wd
# metavar参数用于在帮助信息中显示参数值的占位符
# help参数提供参数的详细描述信息
parser.add_argument('--weight_decay', '--wd', type=float,
                    metavar='W', help='weight decay (default: 5e-4)')

# =========================== Display Configs ============================
# 显示配置参数部分 - 主要定义与输出和保存相关的参数

# 打印频率，指定每多少批次打印一次训练信息
parser.add_argument('--print_freq', type=int)
# 保存频率，指定每多少轮保存一次模型
parser.add_argument('--save_freq', type=int)
# 评估频率，指定每多少轮进行一次评估
parser.add_argument('--eval_freq', type=int)

# 注意：此代码片段只定义了参数解析器，实际使用时需要调用parser.parse_args()来解析命令行参数
# 例如：args = parser.parse_args()